/*
 * Copyright (c) 2022  by Junzhao
 * THIS FILE IS PART OF JAVASE Song Huongkang PROJECT
 * All Rights Reserved.
 */

package Collections工具类;

import org.junit.Test;

import java.util.*;

/**
 * @description Collections工具类
 *              基本上是静态方法 类比数组的Arrays工具类
 *
 *      Collections 是一个操作 Set、List 和 Map 等集合的工具类
 *      Collections 中提供了一系列静态的方法对集合元素进行排序、查询和修改等操作，
 *          还提供了对集合对象设置不可变、对集合对象实现同步控制等方法
 *      排序操作：（均为static方法）
 * reverse(List)：反转 List 中元素的顺序
 * shuffle(List)：对 List 集合元素进行随机排序
 * sort(List)：根据元素的自然顺序对指定 List 集合元素按升序排序
 * sort(List，Comparator)：根据指定的 Comparator 产生的顺序对 List 集合元素进行排序
 * swap(List，int， int)：将指定 list 集合中的 i 处元素和 j 处元素进行交换
 *
 *      查找、替换
 * Object max(Collection)：根据元素的自然顺序，返回给定集合中的最大元素
 * Object max(Collection，Comparator)：根据 Comparator 指定的顺序，返回
 * 给定集合中的最大元素
 * Object min(Collection)
 * Object min(Collection，Comparator)
 *
 * int frequency(Collection，Object)：返回指定集合中指定元素的出现次数
 * void copy(List dest,List src)：将src中的内容复制到dest中
 * boolean replaceAll(List list，Object oldVal，Object newVal)：使用新值替换
 * List 对象的所有旧值
 *
 *      Collections 类中提供了多个
 *          synchronizedXxx() 方法，该方法可使将指定集
 *          合包装成线程同步的集合，从而可以解决多线程并发访问集合时的线程安全
 *          问题
 *
 * @author 俊昭
 * @date 2022/4/20
*/
public class CollectionsTest {
    @Test
    public void test01(){// 排序操作：（均为static方法）
//        List l1 = Arrays.asList("aaa",123,"AB","=.=");
        List l1 = Arrays.asList("aaa","123","AB","=.=");
        System.out.println(l1);// [aaa, 123, AB, =.=]

        // reverse(List)：反转 List 中元素的顺序
        Collections.reverse(l1);
        System.out.println(l1);// [=.=, AB, 123, aaa]

        // shuffle(List)：对 List 集合元素进行随机排序
        Collections.shuffle(l1);
        System.out.println(l1);// [123, aaa, AB, =.=]  [aaa, AB, 123, =.=]

        // sort(List)：根据元素的自然顺序对指定 List 集合元素按升序排序
        Collections.sort(l1);
        System.out.println(l1);// [123, =.=, AB, aaa] 此处按照ASCII码值排序

        // sort(List，Comparator)：根据指定的 Comparator 产生的顺序对 List 集合元素进行排序
        Collections.sort(l1, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                if (o1 instanceof String&& o2 instanceof String){
                    if (o1.equals(o2)){
                        return 0;
                    }else{
                        String s1 = (String) o1;
                        String s2 = (String) o2;
                        return - s1.compareTo(s2);// 降序
                    }
                }
                throw new RuntimeException("错误的类型输入");
            }
        });
        System.out.println(l1);// [aaa, AB, =.=, 123] 确实是按照降序排列了

        // swap(List，int， int)：将指定 list 集合中的 i 处元素和 j 处元素进行交换
        Collections.swap(l1,0,1);// 交换index0 1 的元素
        System.out.println(l1);// [AB, aaa, =.=, 123]


    }
}
